The present invention relates generally to computer device drivers, and, more particularly, to driver assisted asynchronous command processing.
A typical computer graphics system comprises a graphics adapter providing a frame buffer and graphics acceleration hardware, together with a software device driver providing an interface between the graphics adapter hardware and the operating system and/or applications running on top of the operating system. The graphics adapter, which contains at least one graphics processing unit (GPU), is a computer component designed to convert the logical representation of visual information into a signal that can be used as an input for a display medium. The graphics adapter serves to facilitate a display of elaborate graphics while relieving the operating system of computational responsibility for graphics processing, improving overall performance.
A device driver, often called a driver for short, is a computer program that enables another program, typically an operating system (OS), to interact with hardware devices. In a Windows operating system environment, when an application calls a Win32 function with device-independent graphics requests, the Graphics Device Interface (GDI) interprets these instructions and calls the display driver. The display driver then translates these requests into commands for the video hardware to draw graphics on the screen.
GDI calls Device Driver Interface (DDI) functions to pass data to the driver. When an application makes a request of GDI, and GDI determines that the driver supports the relevant function, GDI calls that function. It is the responsibility of the driver to provide the function and return to GDI upon the function's completion.
There is a growing trend in computer systems to employ multi-core central processing units (CPUs), which have multiple threads that can process multiple commands simultaneously. A thread in computer science is short for a thread of execution. Threads are a way for a program to split itself into two or more simultaneously running tasks. Multiple threads can be executed in parallel on many computer systems. This multithreading generally occurs by time slicing (where a single processor switches between different threads) or by multiprocessing (where threads are executed on separate processors). The aforementioned multi-core CPUs are a subject of the later kind of multi-threading, i.e., multiprocessing.
But traditional graphics drivers are designed to run on a single thread of a computer CPU, and they also needs to synchronize with a rendering of a graphics processing unit (GPU). So the traditional graphics driver cannot benefit from multi-core CPU, which can process multiple tasks simultaneously.
Besides, most graphics application software are not written or well written with multi-thread. The application software by itself also cannot benefit from multi-core CPU. In many cases, application running speeds are limited by the CPU execution.
It is therefore desirable for a multi-core CPU computer system to run graphics driver in different thread(s) of graphics application, so that the graphics performance of the computer system can be truly enhanced.